#include <iostream>
#include "Commons/strutils.h"
#include "Commons/misc.h"


using namespace Jin;

int main() {

	SetGlobalLocale();

	{
		AutoCaller caller{
			[]() {
				tcout << _T("onEnter") << std::endl;
			},
			[]() {
				tcout << _T("onLeave") << std::endl;
			}
		};

	}

	OpRecorder oprec;
	int add = 0;
	++add;
	tcout << _T("add = ") << add << std::endl;

	oprec.AddOp(
		[&add]() {
			--add;
			tcout << _T("undo") << std::endl;
		},
		[&add]() {
			++add;
			tcout << _T("redo") << std::endl;
		}
	);

	if (oprec.CanUndo()) {
		oprec.Undo();
		tcout << _T("add = ") << add << std::endl;
	}
	if (oprec.CanRedo()) {
		oprec.Redo();
		tcout << _T("add = ") << add << std::endl;
	}

	return 0;
}